home *** CD-ROM | disk | FTP | other *** search
- OPT MODULE
-
- MODULE 'icon', 'dos/rdargs', 'workbench/startup', 'workbench/workbench'
-
- EXPORT PROC readargs(template:PTR TO CHAR, args, wbmsg:PTR TO wbstartup) HANDLE
- DEF rdargs=NIL, m,n,p, arglst=NIL:PTR TO LONG, tt:PTR TO LONG,
- tstr, name, val, wb_arg=NIL:PTR TO wbarg, dobj=NIL:PTR TO diskobject, olddir
-
- -> If run from shell, then use shell args
- IF wbmsg=NIL
- RETURN ReadArgs(template, args, NIL)
- ENDIF
-
- -> make a big enough list for all name/value pairs for template
- m:=1; FOR n:=0 TO StrLen(template)-1 DO IF template[n]="," THEN INC m
- IF (arglst:=List(m*2))=NIL THEN Raise("MEM")
- SetList(arglst,ListMax(arglst))
-
-
- -> Go through all tooltypes in all selected icons
- IF (iconbase:=OpenLibrary('icon.library',36))=NIL THEN Raise("LIB")
- wb_arg:=wbmsg.arglist
- FOR m:=0 TO wbmsg.numargs-1
- olddir:=CurrentDir(wb_arg.lock)
- dobj:=GetDiskObjectNew(wb_arg.name)
- CurrentDir(olddir)
- tt:=dobj.tooltypes; n:=0
- WHILE tstr:=tt[n++]
-
- -> split up tooltype
- name,val:=ttsplit(tstr)
- -> if in template, place into appropriate list entry
- IF (p:=FindArg(template, name))<>-1
- IF arglst[p*2 ] THEN DisposeLink(arglst[p*2 ])
- IF arglst[p*2+1] THEN DisposeLink(arglst[p*2+1])
- arglst[p*2 ]:=name
- arglst[p*2+1]:=val
- ELSE
- DisposeLink(name)
- DisposeLink(val)
- ENDIF
-
- ENDWHILE
- FreeDiskObject(dobj); dobj:=NIL
- wb_arg++
- ENDFOR
-
-
- m:=1 -> calculate length of final 'arg string' to be parsed by ReadArgs()
- FOR n:=0 TO ListLen(arglst)-1 DO IF p:=arglst[n] THEN m:=m+EstrLen(p)+3
- IF (m:=String(m))=NIL THEN Raise("MEM")
- StrCopy(m,'')
-
- -> concatenate final arg settings into one big string
- FOR n:=0 TO ListLen(arglst)-1
- IF p:=arglst[n]
- IF InStr(p,' ')=-1
- StrAdd(m,p)
- StrAdd(m,' ')
- ELSE
- StrAdd(m,'"')
- StrAdd(m,p)
- StrAdd(m,'" ')
- ENDIF
- ENDIF
- ENDFOR
-
- rdargs:=ReadArgs(template,args,[m,EstrLen(m),0,NIL,NIL,0,NIL,RDAF_NOPROMPT])
- DisposeLink(tstr)
-
- Raise()
- EXCEPT DO
- IF arglst
- FOR n:=0 TO ListLen(arglst) DO IF p:=arglst[n] THEN DisposeLink(p)
- DisposeLink(arglst)
- ENDIF
- IF dobj THEN FreeDiskObject(dobj)
- IF iconbase THEN CloseLibrary(iconbase)
- ReThrow()
- ENDPROC rdargs
-
- PROC ttsplit(s:PTR TO CHAR)
- -> of something 'blah=foo', returns 'blah','foo'
- -> of something 'blah', returns 'blah',NIL
- -> of something beginning '(', 'IM1=' or 'IM2=', returns NIL,NIL
-
- DEF div,len,l,r
-
- IF s=NIL THEN RETURN NIL,NIL
- IF (s[0]="(") OR (InStr(s,'IM1=')=0) OR (InStr(s,'IM2=')=0) THEN
- RETURN NIL,NIL
-
- len:=StrLen(s)
- div:=InStr(s,'=')
-
- IF div=-1
- l:=String(len)
- IF l THEN StrCopy(l,s)
- RETURN l,NIL
- ENDIF
-
- l:=String(div+1)
- r:=String(len-div)
-
- IF (l AND r)=NIL
- IF l THEN DisposeLink(l)
- IF r THEN DisposeLink(r)
- RETURN NIL,NIL
- ENDIF
-
- MidStr(l,s,0,div)
- MidStr(r,s,div+1)
- ENDPROC l,r
-